package day21.zhiyou100;

import javax.xml.crypto.Data;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.Scanner;

/*
  如果我们一直在客户端输入信息，服务器端应该是一直能够接收，当客户端输入一个结束标志，服务器端停止接收

这时候我们可以让服务器端给客户端发送信息，也是一直能够发送，直到服务器端输入一个结束标志，客户端停止接收

此时客户端和服务器端断开连接，程序结束
 */

//晚上作业：客户端给服务器端发信息的时候，服务器端能够接收到信息，此时服务器端不用等待客户端结束发送，服务器端直接可以给客户端发送信息，客户端也能够接收到服务器端信息 TCP

class ServerTCP2{
    public static void main(String[] args) throws Exception{
        Scanner scanner = new Scanner(System.in);
        System.out.println("服务器端已启动，等待客户端连接-----");
        ServerSocket server = new ServerSocket(8088);
        // 接收客户端发送的信息
        // accept() 用来接收一个客户端
        Socket socket = server.accept();
        System.out.println("接收到一个客户端,开始接收信息：");
        while (true) {
            // 接收来自于服务器端的信息
            InputStream is = socket.getInputStream();
            byte[] data = new byte[1024];
            int read = is.read(data);
            String receive = new String(data, 0, read);
            System.out.println("从服务器端接收到的信息" + new String(data,0,read));
            if (receive.contains("end")) {
                System.out.println("开始发送信息：");
                break;
            }
        }
        // 发送信息
        while (true) {
            String inputContent = scanner.next();
            // 转换字节数组
            byte[] bytes = inputContent.getBytes();
            OutputStream os = socket.getOutputStream();
            os.write(bytes);// 发送一次
            // 结束标志
            if (inputContent.contains("over")) {
                break;
            }
        }
        socket.close();
        server.close();
    }
}

// 客户端
public class ClientTCP2 {
    public static void main(String[] args) throws Exception{
        System.out.println("客户端已经启动，正在连接服务端。。。");
        //InetAddress address = InetAddress.getLocalHost();
        Socket socket = new Socket("127.0.0.1",8088);
        // 客户端可以给服务端发送信息  也可以接收服务端发送的信息
        System.out.println("服务端已经连接成功，开始往服务器端发送信息：");
        // 准别一个扫描流
        Scanner scanner = new Scanner(System.in);
        while (true) {
            String inputContent = scanner.next();
            // 转换字节数组
            byte[] bytes = inputContent.getBytes();
            OutputStream os = socket.getOutputStream();
            os.write(bytes);// 发送一次
            // 结束标志
            if (inputContent.contains("end")) {
                break;
            }
        }

        while (true) {
            // 接收来自于服务器端的信息
            InputStream is = socket.getInputStream();
            byte[] data = new byte[1024];
            int read = is.read(data);
            String receive = new String(data, 0, read);
            System.out.println("从服务器端接收到的信息" + new String(data,0,read));
            if (receive.contains("over")) {
                break;
            }
        }

        socket.close();
    }
}
